const http = require('http');
let time;
time = new Date().toUTCString();
function getCurrTime() {
    this.timer = this.timer || setInterval(() => {
        time = new Date().toUTCString(); // 格林豪治时间 GMT格式
    }, 10*1000)
    return time;
}

http.createServer((req, res) => {
    const {url} = req;
    if(url === '/') {
        const content = `
            <html>
                <head>
                    <meta charset="UTF-8">
                </head>
                <body>
                    <h1>当前时间为：${getCurrTime()}</h1>
                    <script src="main.js"></script>
                </body>
            </html>
        `

        res.statusCode = 200;
        res.end(content);
    } else if(url === '/main.js') {
        const content = `document.writeln('js时间为：${getCurrTime()}')`;
        // 强缓存
        // Expires 为当前时间10s之后
        // 缺点 以客户端时间为准，但实际情况下客户端时间无法控制 单位为GMT时间 以毫秒计算
        // const date = new Date(Date.now() + 10 * 1000).toUTCString();
        // res.setHeader('Expires', date); // http1.0
        // res.setHeader('Cache-Control', 'max-age=20') // 单位为秒， 还可以搭配其他值，一般上需要设置 no-cache

        // 协商缓存
        // last-modified-since 上次时间 date.now 当前时间
        // 如果上次时间+10s > date.now 
        // if(new Date(req.headers['if-modified-since']).getTime() + 10 * 1000 > Date.now()) {
        //     res.statusCode = 304;
        //     res.end();
        //     return;
        // }
        // res.setHeader('last-modified', new Date().toUTCString());
        // console.log(req.headers['if-modified-since'])
        
        const crypto = require('crypto');
        const hash = crypto.createHash('md5').update(content).digest('hex');
        console.log(req.headers['if-none-match'], 1)
        if(req.headers['if-none-match'] === hash) {
            res.statusCode = 304;
            res.end();
            return;
        }
        
        res.setHeader('etag', hash);
        
        res.statusCode = 200;
        res.end(content);
    } else {
        res.statusCode = 200;
        res.end();
    }
}).listen(8083, () => {
    console.log('HTTP CACH TEST SERVER START UP IN 8083')
})